package sv.gob.mtps.sib.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import sv.gob.mtps.sib.dao.FacturaDAO;
import sv.gob.mtps.sib.model.Bodega;
import sv.gob.mtps.sib.model.DetFacVw;
import sv.gob.mtps.sib.model.FacMasterVw;
import sv.gob.mtps.sib.model.Factura;
import sv.gob.mtps.sib.model.FacturaHasProducto;
import sv.gob.mtps.sib.model.Inventario;
import sv.gob.mtps.sib.model.InventarioHasTransacciones;
import sv.gob.mtps.sib.model.ObjProductVw;
import sv.gob.mtps.sib.model.ProductoHasObjetoespecifico;
import sv.gob.mtps.sib.model.Promedio;
import sv.gob.mtps.sib.model.PromedioUnitarioVw;
import sv.gob.mtps.sib.model.Transaccion;

@Service
public class FacturaServiceImpl implements FacturaService{
	
	@Autowired
    private FacturaDAO fondos;

	@Transactional
	public void addFactura(Factura factura) {
		// TODO Auto-generated method stub
		fondos.addFactura(factura);
	}

	@Transactional
	public List<Factura> listFactura() {
		// TODO Auto-generated method stub
		return fondos.listFactura();
	}

	@Transactional
	public void removeFactura(Integer id) {
		// TODO Auto-generated method stub
		fondos.removeFactura(id);
	}

	@Transactional
	public Factura findFactura(Integer id) {
		// TODO Auto-generated method stub
		return 	fondos.findFactura(id);
	}

	@Transactional
	public void updateFactura(Factura factura) {
		// TODO Auto-generated method stub
		fondos.updateFactura(factura); 
	}

    /*Se agregan los metodos 
     * para los update del detalle 
     * de la Factura*/

	@Transactional
	public void addFacturaDet(FacturaHasProducto facturaDet) {
		// TODO Auto-generated method stub
		fondos.addFacturaDet(facturaDet);
	}

	@Transactional
	public List<FacturaHasProducto> listFacturaDet(Integer id) {
		// TODO Auto-generated method stub
		return fondos.listFacturaDet(id);
	}

	@Transactional
	public void removeFacturaDet(Integer id) {
		// TODO Auto-generated method stub
		fondos.removeFacturaDet(id);
	}

	@Transactional
	public FacturaHasProducto findFacturaDet(Integer id) {
		// TODO Auto-generated method stub
		return fondos.findFacturaDet(id);
	}

	@Transactional
	public void updateFacturaDet(FacturaHasProducto facturaDet) {
		// TODO Auto-generated method stub
		fondos.updateFacturaDet(facturaDet);
		
	}

	@Transactional
	public List<ObjProductVw> listObjeto() {
		// TODO Auto-generated method stub
		return fondos.listObjeto();
	}

	@Transactional
	public List<Bodega> listBodega() {
		// TODO Auto-generated method stub
		return fondos.listBodega();
	}

	@Transactional
	public List<Inventario> listInvent(int bodega, int fuenteFondo,
			int producto_objeto) {
		// TODO Auto-generated method stub
		return fondos.listInvent(bodega, fuenteFondo, producto_objeto);
	}

	@Transactional
	public void addInventario(Inventario inv) {
		// TODO Auto-generated method stub
		fondos.addInventario(inv);
	}

	@Transactional
	public Bodega findBodega(int id) {
		// TODO Auto-generated method stub
		return fondos.findBodega(id);
	}

	@Transactional
	public ProductoHasObjetoespecifico findPrdObj(int id) {
		// TODO Auto-generated method stub
		return fondos.findPrdObj(id);
	}

	@Transactional
	public void addTransaccion(InventarioHasTransacciones transact) {
		// TODO Auto-generated method stub
		fondos.addTransaccion(transact);
		
	}

	@Transactional
	public List<FacturaHasProducto> listFacturaDet(Integer id, Integer idProObj) {
		// TODO Auto-generated method stub
		return fondos.listFacturaDet(id, idProObj);
	}

	@Transactional
	public Transaccion findTransaccion(int id) {
		// TODO Auto-generated method stub
		return fondos.findTransaccion(id);
	}

	@Transactional
	public void updateInventario(Inventario inv) {
		// TODO Auto-generated method stub
		fondos.updateInventario(inv);
	}

	@Transactional
	public List<InventarioHasTransacciones> listTransacciones(int documentoPadre,int hijo, int tipoTran) {
		// TODO Auto-generated method stub
		return fondos.listTransacciones(documentoPadre,hijo,tipoTran);
	}

	@Transactional
	public List<DetFacVw> listDetFact(Integer id) {
		// TODO Auto-generated method stub
		return fondos.listDetFact(id);
	}

	@Transactional
	public int getTotalTran(int documentoPadre, int tipoTran) {
		// TODO Auto-generated method stub
		return fondos.getTotalTran(documentoPadre,tipoTran);
	}

	@Transactional
	public int getTotalTran(int documentoPadre) {
		// TODO Auto-generated method stub
		return fondos.getTotalTran(documentoPadre);
	}

	@Transactional
	public List<FacMasterVw> listMasterVw() {
		// TODO Auto-generated method stub
		return fondos.listMasterVw();
	}

	@Transactional
	public List<Promedio> listPromedio(int productoId) {
		// TODO Auto-generated method stub
		return fondos.listPromedio(productoId);
	}

	@Transactional
	public void addPromedio(Promedio pr) {
		// TODO Auto-generated method stub
		fondos.addPromedio(pr);
	}

	@Transactional
	public void updatePromedio(Promedio pr) {
		// TODO Auto-generated method stub
		fondos.updatePromedio(pr);
	}

	@Transactional
	public Promedio findPromedio(Integer promedioId) {
		// TODO Auto-generated method stub
		return fondos.findPromedio(promedioId);
	}

	@Transactional
	public List<PromedioUnitarioVw> listPromedioTotal(int productoId) {
		// TODO Auto-generated method stub
		return fondos.listPromedioTotal(productoId);
	}
	

    

}
